#include <QApplication>     // 提供 Qt 应用程序主入口类
#include <QWidget>          // 提供基本窗口部件
#include <QStackedWidget>   // 提供堆叠部件，一次只显示一个页面
#include <QPushButton>      // 提供按钮控件
#include <QVBoxLayout>      // 垂直布局管理器
#include <QHBoxLayout>      // 水平布局管理器
#include <QLabel>           // 标签控件，用于显示文字
#include <QLineEdit>        // 单行文本输入框
#include <QDebug>           // 调试输出

int main(int argc, char *argv[]) {
    QApplication app(argc, argv); // 创建 Qt 应用程序对象，管理整个应用的控制流

    QWidget *mainWindow = new QWidget;             // 创建主窗口部件
    mainWindow->setWindowTitle("注册向导示例");     // 设置窗口标题

    QVBoxLayout *mainLayout = new QVBoxLayout;     // 创建主垂直布局管理器

    QLabel *statusLabel = new QLabel("当前步骤：1 / 4"); // 显示当前步骤的状态标签

    QStackedWidget *stack = new QStackedWidget;    // 创建堆叠控件，用于管理多个页面

    // ===== 第1页：输入基本信息 =====
    QWidget *page1 = new QWidget;                  // 创建第一个页面
    QVBoxLayout *layout1 = new QVBoxLayout;        // 设置页面的布局为垂直
    layout1->addWidget(new QLabel("请输入用户名：")); // 添加标签
    layout1->addWidget(new QLineEdit);             // 添加输入框
    layout1->addWidget(new QLabel("请输入邮箱："));   // 添加标签
    layout1->addWidget(new QLineEdit);             // 添加输入框
    page1->setLayout(layout1);                     // 应用布局到页面
    stack->addWidget(page1);                       // 将页面添加到堆叠部件中（索引 0）

    // ===== 第2页：填写详情 =====
    QWidget *page2 = new QWidget;
    QVBoxLayout *layout2 = new QVBoxLayout;
    layout2->addWidget(new QLabel("请输入个人简介："));
    layout2->addWidget(new QLineEdit);
    layout2->addWidget(new QLabel("请输入地址："));
    layout2->addWidget(new QLineEdit);
    page2->setLayout(layout2);
    stack->addWidget(page2);                       // 索引 1

    // ===== 第3页：确认信息 =====
    QWidget *page3 = new QWidget;
    QVBoxLayout *layout3 = new QVBoxLayout;
    layout3->addWidget(new QLabel("请确认您的注册信息是否正确。"));
    layout3->addWidget(new QLabel("（这里可汇总前面页面填写的内容）")); // 可扩展为动态汇总内容
    page3->setLayout(layout3);
    stack->addWidget(page3);                       // 索引 2

    // ===== 第4页：完成提示 =====
    QWidget *page4 = new QWidget;
    QVBoxLayout *layout4 = new QVBoxLayout;
    layout4->addWidget(new QLabel("🎉 注册成功！欢迎使用本系统。")); // 注册成功提示
    page4->setLayout(layout4);
    stack->addWidget(page4);                       // 索引 3

    // ===== 下方按钮区：上一步、下一步 =====
    QPushButton *btnPrev = new QPushButton("上一步"); // 创建“上一步”按钮
    QPushButton *btnNext = new QPushButton("下一步"); // 创建“下一步”按钮

    QHBoxLayout *btnLayout = new QHBoxLayout;         // 创建水平布局用于按钮
    btnLayout->addWidget(btnPrev);                    // 添加“上一步”按钮
    btnLayout->addWidget(btnNext);                    // 添加“下一步”按钮

    btnPrev->setEnabled(false);                       // 默认在第1页，“上一步”不可用

    // ===== “下一步”按钮事件 =====
    QObject::connect(btnNext, &QPushButton::clicked, [=]() mutable {
        int idx = stack->currentIndex();              // 获取当前页面索引
        if (idx < stack->count() - 1) {               // 如果不是最后一页
            stack->setCurrentIndex(idx + 1);          // 切换到下一页
        }

        btnPrev->setEnabled(stack->currentIndex() > 0); // 如果不是第一页，启用“上一步”
        btnNext->setText(stack->currentIndex() == stack->count() - 1 ? "完成" : "下一步"); // 最后一页时改成“完成”

        // 更新状态标签内容
        statusLabel->setText(QString("当前步骤：%1 / %2")
                                     .arg(stack->currentIndex() + 1)
                                     .arg(stack->count()));
    });

    // ===== “上一步”按钮事件 =====
    QObject::connect(btnPrev, &QPushButton::clicked, [=]() mutable {
        int idx = stack->currentIndex();              // 当前页面索引
        if (idx > 0) {
            stack->setCurrentIndex(idx - 1);          // 切换到上一页
        }

        btnPrev->setEnabled(stack->currentIndex() > 0); // 第1页禁用“上一步”
        btnNext->setText(stack->currentIndex() == stack->count() - 1 ? "完成" : "下一步");

        statusLabel->setText(QString("当前步骤：%1 / %2")
                                     .arg(stack->currentIndex() + 1)
                                     .arg(stack->count()));
    });

    // ===== 主界面布局组合 =====
    mainLayout->addWidget(stack);         // 添加堆叠页面控件
    mainLayout->addWidget(statusLabel);   // 添加状态标签
    mainLayout->addLayout(btnLayout);     // 添加按钮布局

    mainWindow->setLayout(mainLayout);    // 设置主窗口的总布局

    mainWindow->resize(400, 300);         // 设置窗口初始大小
    mainWindow->show();                   // 显示主窗口

    return app.exec();                    // 启动应用程序主事件循环
}
/*
 * 窗口主界面
├── QStackedWidget
│   ├── 第1页：用户名 + 邮箱
│   ├── 第2页：简介 + 地址
│   ├── 第3页：确认信息
│   └── 第4页：完成提示
├── QLabel 状态显示（第几步）
└── 下方按钮（上一步 / 下一步）

 * */
